package com.thiswhyme.redis.lock;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 分布式锁注解
 *
 * @author thiswhyme
 * @date 2022/10/25
 */
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DistributedLock {

    /**
     * 持有时间（单位：s）
     *
     * @return
     */
    long leaseTime() default 30L;

    /**
     * 获取等待时间（单位：s）
     *
     * @return
     */
    long waitTime() default 10L;

    /**
     * 锁key前缀，可选
     *
     * @return
     */
    String keyPrefix() default "";

    /**
     * 锁key后缀，支持SpEL
     * 最终lockKey格式为：
     *    keyPrefix为空：key[1]-key[2]
     *    keyPrefix不为空：keyPrefix:key[1]-key[2]
     * @return
     */
    String[] key();
}
